package br.edu.universo.si.projeto2.infojob.client.apresentacao;

import br.edu.universo.si.projeto2.infojob.client.bean.BeanAssinante;
import br.edu.universo.si.projeto2.infojob.client.bean.BeanEmpresaAssinante;
import br.edu.universo.si.projeto2.infojob.client.bean.BeanProfissionalAssinante;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.ErrorDialogBox;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.InformationDialogBox;
import br.edu.universo.si.projeto2.infojob.client.util.Util;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;

public class APrincipal extends DockPanel
{
	private static final Panel root = RootPanel.get();	

	private ALogin viewLogin;
	private ABannerCadastroEmpresa viewBannerCadastroEmpresa;
	private ABannerCadastroProfissional viewBannerCadastroProfissional;
	private ACadastroEmpresa viewCadastroEmpresa;
	private ABannerLogo viewBannerLogo;
	private ACadastroProfissional viewCadastroProfissional;

	public APrincipal()
	{
		this.setHorizontalAlignment(DockPanel.ALIGN_CENTER);
		this.setSpacing(10);

		viewLogin = new ALogin();
		viewBannerCadastroEmpresa = new ABannerCadastroEmpresa();
		viewBannerCadastroProfissional = new ABannerCadastroProfissional();
		viewCadastroEmpresa = new ACadastroEmpresa();
		viewBannerLogo = new ABannerLogo();
		viewCadastroProfissional = new ACadastroProfissional();

		// acao para o botao 'Logar'
		viewLogin.getLogonBtn().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{

					//callback login
					AsyncCallback<BeanAssinante> callbackLogin = new AsyncCallback<BeanAssinante>()
					{
						public void onSuccess(final BeanAssinante result)
						{
							if (result == null)
							{
								ErrorDialogBox errorDialogBox = new ErrorDialogBox("Nome de usuário e/ou senha incorretos.");
								errorDialogBox.show();
								errorDialogBox.center();
							}
							else
							{
								if (result instanceof BeanProfissionalAssinante)
								{
									root.remove(APrincipal.this);
									root.add(new AProfissional((BeanProfissionalAssinante) result));
								}
								
								if (result instanceof BeanEmpresaAssinante)
								{
									root.remove(APrincipal.this);
									root.add(new AEmpresa((BeanEmpresaAssinante) result));
								}								
							}
						};

						public void onFailure(Throwable caught)
						{
							ErrorDialogBox erroDialogBox = new ErrorDialogBox("Erro ao tentar fazer login: " + caught.getMessage());
							erroDialogBox.show();
							
						};
					};

					// captura dados dos campos
					String conta = viewLogin.getLoginTxtBox().getText();
					String senha = viewLogin.getSenhaTxtBox().getText();

					if (conta.equalsIgnoreCase(""))
					{
						InformationDialogBox infoDialogBox = new InformationDialogBox("Preencha o campo conta.");
						infoDialogBox.center();
						infoDialogBox.show();
					}
					else if (senha.equalsIgnoreCase(""))
					{
						InformationDialogBox infoDialogBox = new InformationDialogBox("Preencha o campo senha.");
						infoDialogBox.center();
						infoDialogBox.show();						
					}
					else
					{
						Util.getService().login(conta, senha, callbackLogin);
					}
					
				}
			}
		);
		
		// chama a tela de Cadastro de Empresa...
		viewBannerCadastroEmpresa.getCadastrarEmpresaBtn().addClickListener(
				new ClickListener()
				{
					public void onClick(Widget sender)
					{
						root.remove(APrincipal.this);
						root.add(viewCadastroEmpresa);
					}
				}
		);

		// chama a tela de Cadastro de Profissional...
		viewBannerCadastroProfissional.getCadastrarProfissionalBtn().addClickListener(
				new ClickListener()
				{
					public void onClick(Widget sender)
					{
						root.remove(APrincipal.this);
						root.add(viewCadastroProfissional);
					}
				}
		);
		
		this.add(viewBannerLogo, DockPanel.NORTH);
		this.add(viewLogin, DockPanel.CENTER);
		this.add(viewBannerCadastroEmpresa, DockPanel.WEST);
		this.add(viewBannerCadastroProfissional, DockPanel.EAST);
	}
}